#!/bin/bash

# 配置参数
LOG_DIR="/data/metro-crawler/logs"
MAX_LOGS=7  # 保留最近7天的日志
MAX_LOG_SIZE_MB=100  # 单个日志文件最大大小（MB）

# 创建日志目录
mkdir -p $LOG_DIR

# 清理旧日志文件（保留最近7天的）
find $LOG_DIR -name "metro-crawler-*.log" -type f -mtime +$MAX_LOGS -delete

# 生成日志文件名（使用当前时间戳）
LOG_FILE="$LOG_DIR/metro-crawler-$(date +%Y%m%d_%H%M%S).log"

# 检查并轮转大文件的函数
check_and_rotate_log() {
    local log_file=$1
    local max_size=$((MAX_LOG_SIZE_MB * 1024 * 1024))  # 转换为字节
    
    while true; do
        if [ -f "$log_file" ]; then
            current_size=$(stat -f%z "$log_file" 2>/dev/null || stat -c%s "$log_file" 2>/dev/null)
            if [ $current_size -gt $max_size ]; then
                timestamp=$(date +%Y%m%d_%H%M%S)
                mv "$log_file" "${log_file%.log}_${timestamp}.log"
                touch "$log_file"
            fi
        fi
        sleep 300  # 每5分钟检查一次
    done
}

# 切换到项目目录
cd /data/metro-crawler

# 确保有执行权限
chmod +x ./node_modules/.bin/*

# 在后台启动日志检查
check_and_rotate_log "$LOG_FILE" &
ROTATE_PID=$!

# 清理函数
cleanup() {
    kill $ROTATE_PID 2>/dev/null
    exit
}

# 注册清理函数
trap cleanup EXIT INT TERM

# 使用nohup执行npm命令
nohup npm run prod > "$LOG_FILE" 2>&1 &

# 输出日志文件位置
echo "进程已在后台启动"
echo "日志已保存到: $LOG_FILE"
echo "使用以下命令查看日志："
echo "tail -f $LOG_FILE" 